package org.example.prototype;

//原型模式实例
//图形编辑器：复制粘贴图形元素
//游戏开发：克隆NPC、武器、敌人
//缓存实现：存储和返回对象的克隆
//配置管理：创建配置对象的变体
//生物模拟：细胞分裂模拟
public class PrototypeDemo {
    public static void main(String[] args) {
        // 1. 直接克隆现有对象
        Circle originalCircle = new Circle("绿色", 15);//圆圈
        Circle clonedCircle = (Circle) originalCircle.clone();

        System.out.println("原始圆形:");
        originalCircle.draw();

        System.out.println("克隆圆形:");
        clonedCircle.draw();

        // 修改克隆对象不影响原始对象
        clonedCircle.setRadius(20);
        clonedCircle.setColor("紫色");

        System.out.println("\n修改后克隆圆形:");
        clonedCircle.draw();

        System.out.println("原始圆形(未改变):");
        originalCircle.draw();

        // 2. 使用原型注册表
        System.out.println("\n使用原型注册表创建对象:");

        // 创建默认圆形
        Shape circle1 = ShapeRegistry.getPrototype("defaultCircle");
        circle1.draw();

        // 创建默认矩形
        Shape rectangle1 = ShapeRegistry.getPrototype("defaultRectangle");
        rectangle1.draw();

        // 添加新原型并获取
        ShapeRegistry.addPrototype("bigYellowCircle", new Circle("黄色", 50));
        Shape bigCircle = ShapeRegistry.getPrototype("bigYellowCircle");
        bigCircle.draw();
    }
}